package com.student.Activitys.activity;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.LocationSource;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.MyLocationStyle;
import com.amap.api.maps.model.Poi;
import com.amap.api.navi.AmapNaviPage;
import com.amap.api.navi.AmapNaviParams;
import com.amap.api.navi.AmapNaviType;
import com.amap.api.navi.AmapPageType;
import com.amap.api.navi.INaviInfoCallback;
import com.amap.api.navi.model.AMapNaviLocation;
import com.student.Activitys.R;
import com.zhy.autolayout.AutoLayoutActivity;

/**
 * 项目名称：智慧校园学生端
 * 类描述：校内地图
 * 创建人：张飞祥
 * 创建时间：2017/11/9 9:00
 * 修改人：张飞祥
 * 修改时间：2017/11/9 9:00
 * 修改备注：
 */
public class SchoolMapActivity extends AutoLayoutActivity implements INaviInfoCallback, LocationSource, AMapLocationListener {


//    @Bind(R.id.map_school)
//    MapView mapSchool;
//    @Bind(R.id.iv_return)
//    ImageView ivReturn;
//    @Bind(R.id.tv_title)
//    TextView tvTitle;

    LatLng p4 = new LatLng(39.773801, 116.368984);//新三余公园(南5环)
    LatLng p5 = new LatLng(40.041986, 116.414496);//立水桥(北5环)

    //控件
    MapView mapSchool = null;
    //定位蓝点
    private AMap aMap = null;
    //定位监听
    private OnLocationChangedListener mListener;
    AMapLocationClient mlocationClient;
    AMapLocationClientOption mLocationOption;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act_school_map);
        initUI();
        initData();

        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState)，创建地图
        mapSchool.onCreate(savedInstanceState);
    }

    private void initUI() {
        //获取地图控件引用
        mapSchool = (MapView) findViewById(R.id.map_school);

    }


    private void initData() {
        /**
         * 跳转 导航页面导航
         */
        Poi start = new Poi("立水桥(北5环)", p5, "");//起点
        Poi end = new Poi("新三余公园(南5环)", p4, "");//终点

        initStartNavigation(start,end);

        /**
         * 定位初始化蓝点
         */
        if (aMap == null) {
            aMap = mapSchool.getMap();
            setUpMap();
        }

    }

    /**
     * 开始导航
     */
    private void initStartNavigation(Poi start, Poi end) {

        /**
         * 设置 地图样式
         *
         * AmapNaviType（交通方式）
         *      DRIVER：驾车
         *      WALK：步行
         *      RIDE：骑行
         *
         *AmapPageType（是否直接导航）
         *      NAVI：直接导航
         *      ROUTE：先路线规划 ---> 进行导航
         */
        AmapNaviParams amapNaviParams = new AmapNaviParams(start, null, end, AmapNaviType.WALK, AmapPageType.NAVI);
        AmapNaviPage.getInstance().showRouteActivity(getApplicationContext(), amapNaviParams, SchoolMapActivity.this);
    }

    /**
     * 初始化定位 蓝点
     */
    private void setUpMap() {
        MyLocationStyle myLocationStyle;
        myLocationStyle = new MyLocationStyle();
        /**
         * /连续定位、且将视角移动到地图中心点，定位点依照设备方向旋转，并且会跟随设备移动。（1秒1次定位）
         * 如果不设置myLocationType，默认也会执行此种模式。
         */
        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
        //设置连续定位模式下的定位间隔，只在连续定位模式下生效，单次定位模式下不会生效。单位为毫秒。
        myLocationStyle.interval(2000);
        //设置定位蓝点的Style
        aMap.setMyLocationStyle(myLocationStyle);
        //设置默认定位按钮是否显示，非必需设置。
        aMap.getUiSettings().setMyLocationButtonEnabled(true);
        //去掉高德地图右下角隐藏的缩放按钮
        aMap.getUiSettings().setZoomControlsEnabled(false);
        // 设置为true表示启动显示定位蓝点，false表示隐藏定位蓝点并不进行定位，默认是false。
        aMap.setMyLocationEnabled(true);
        // 设置定位监听
        aMap.setLocationSource(this);
        // 设置为true表示显示定位层并可触发定位，false表示隐藏定位层并不可触发定位，默认是false
        aMap.setMyLocationEnabled(true);
    }



    /**
     * 开始定位
     * @param onLocationChangedListener
     */
    @Override
    public void activate(OnLocationChangedListener onLocationChangedListener) {
        mListener = onLocationChangedListener;
        if (mlocationClient == null) {
            //初始化定位
            mlocationClient = new AMapLocationClient(this);
            //初始化定位参数
            mLocationOption = new AMapLocationClientOption();
            //设置定位回调监听
            mlocationClient.setLocationListener(this);
            //设置为高精度定位模式
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            //设置定位参数
            mlocationClient.setLocationOption(mLocationOption);
            // 此方法为每隔固定时间会发起一次定位请求，为了减少电量消耗或网络流量消耗，
            // 注意设置合适的定位时间的间隔（最小间隔支持为2000ms），并且在合适时间调用stopLocation()方法来取消定位请求
            // 在定位结束后，在合适的生命周期调用onDestroy()方法
            // 在单次定位情况下，定位无论成功与否，都无需调用stopLocation()方法移除请求，定位sdk内部会移除
            mlocationClient.startLocation();//启动定位
        }
    }

    /**
     * 停止定位
     */
    @Override
    public void deactivate() {
        mListener = null;
        if (mlocationClient != null) {
            mlocationClient.stopLocation();
            mlocationClient.onDestroy();
        }
        mlocationClient = null;
    }

    /**
     * 定位成功后回调函数
     */
    @Override
    public void onLocationChanged(AMapLocation amapLocation) {


        if (mListener != null&&amapLocation != null) {
            if (amapLocation != null
                    &&amapLocation.getErrorCode() == 0) {
                mListener.onLocationChanged(amapLocation);// 显示系统小蓝点
            } else {
                String errText = "定位失败," + amapLocation.getErrorCode()+ ": " + amapLocation.getErrorInfo();
                Log.e("AmapErr",errText);
            }
        }
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy()，销毁地图
        mapSchool.onDestroy();
        //销毁定位
        if(null != mlocationClient){
            mlocationClient.onDestroy();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume ()，重新绘制加载地图
        mapSchool.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause ()，暂停地图的绘制
        mapSchool.onPause();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState)，保存地图当前的状态
        mapSchool.onSaveInstanceState(outState);
    }


    /**
     * -------------------------------------------↓ 导航连带方法↓ ----------------------------------------------------------
     */
    @Override
    public void onInitNaviFailure() {

    }

    @Override
    public void onGetNavigationText(String s) {

    }

    @Override
    public void onLocationChange(AMapNaviLocation aMapNaviLocation) {

    }

    @Override
    public void onArriveDestination(boolean b) {

    }

    @Override
    public void onStartNavi(int i) {

    }

    @Override
    public void onCalculateRouteSuccess(int[] ints) {

    }

    @Override
    public void onCalculateRouteFailure(int i) {

    }

    @Override
    public void onStopSpeaking() {

    }
}
